package de.schule.barnimgymnasium.javafx;

import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javafx.application.Application;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import de.schule.barnimgymnasium.javafx.broadcaster.Network;
import de.schule.barnimgymnasium.javafx.broadcaster.Network.IncomingObject;

public class FullEndDay04 extends Application {

	final VBox nachrichtenanzeige = new VBox();

	@Override
	public void start(Stage primaryStage) throws Exception {
		final Network network = new Network();
		final TextArea nachrichtenanzeigebereich = new TextArea();
		network.setOnSucceeded(new EventHandler<WorkerStateEvent>() {

			@Override
			public void handle(WorkerStateEvent event) {
				if (event.getSource() instanceof Network) {
					final Network n = (Network) event.getSource();
					Object obj = n.getValue();
					if (obj instanceof IncomingObject) {
						final IncomingObject incoming = (IncomingObject) obj;
						obj = incoming.getObject();
						if (obj instanceof String) {
							String nachricht = (String) obj;
							nachrichtenanzeigebereich.appendText(nachricht);
						}
						InetAddress sender = incoming.getAddress();
						nachrichtenanzeigebereich.appendText(sender.toString());
					}
				}
				network.restart();
			}
		});
		network.start();
		VBox.setVgrow(nachrichtenanzeigebereich, Priority.ALWAYS);
		final TextField nachrichteneingabezeile = new TextField();
		nachrichteneingabezeile.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				// nachrichtenanzeigebereich.appendText("\nNeue Nachricht");
				String nachricht = nachrichteneingabezeile.getText();
				nachrichtenanzeigebereich.appendText("\n");
				nachrichtenanzeigebereich.appendText(nachricht);
				appendMessage(nachricht);
				nachrichteneingabezeile.clear();
				network.broadcastObject(nachricht);
			}

		});
		// StackPane pane = new StackPane();
		// HBox pane = new HBox();
		VBox pane = new VBox();
		ScrollPane scroll = new ScrollPane();
		scroll.setContent(nachrichtenanzeige);
		// pane.getChildren().addAll(nachrichtenanzeigebereich,
		// nachrichtenanzeige, nachrichteneingabezeile);
		pane.getChildren().addAll(nachrichtenanzeigebereich, scroll, nachrichteneingabezeile);
		primaryStage.setScene(new Scene(pane, 300, 250));
		primaryStage.setTitle("Skaip oder so...");
		primaryStage.show();
	}

	private void appendMessage(String message) {
		HBox box = new HBox();
		Text messageText = new Text(message);
		Text datumText = new Text();
		final Calendar cal = Calendar.getInstance();
		final SimpleDateFormat formater = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
		datumText.setText("[" + formater.format(cal.getTime()) + "]");
		box.getChildren().addAll(datumText, messageText);
		nachrichtenanzeige.getChildren().add(box);
		if (nachrichtenanzeige.getChildren().size() > 4) {
			nachrichtenanzeige.getChildren().remove(0);
		}
	}

	/**
	 * @param args
	 */
	public static void main(final String[] args) {
		Application.launch(args);

	}
}
